package org.ichamigua.user.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import jakarta.servlet.http.HttpServletRequest;
import jdk.jfr.ContentType;
import org.ichamigua.user.mapper.UserMapper;
import org.ichamigua.user.mapper.UserUpdateAvatarLogMapper;
import org.ichamigua.user.mapper.UserUpdateNicknameLogMapper;
import org.ichamigua.user.mapper.UserUpdateUsernameLogMapper;
import org.ichamigua.user.service.UserService;
import org.ichamigua.user.service.UserUpdateAvatarLogService;
import org.ichihamigua.common.framework.entity.Result;
import org.ichihamigua.common.user.dto.UpdateAvatarLogDto;
import org.ichihamigua.common.user.dto.UpdateNicknameDto;
import org.ichihamigua.common.user.dto.UpdateUsernameDto;
import org.ichihamigua.common.user.entity.UserUpdateAvatarLogEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Objects;

/**
 * @author rainkyzhong
 * @date 2023/10/29 23:58
 */
@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    @Autowired
    private UserUpdateAvatarLogService userUpdateAvatarLogService;


    /**
     * 修改头像接口
     */
    @PutMapping("/update_avatar")
    public Result<?> updateAvatar(HttpServletRequest request, MultipartFile file) {
        Long userId = 1L;
        //检查文件是否是图片
        if (!Objects.equals(file.getContentType(), MediaType.IMAGE_JPEG_VALUE)
                && !Objects.equals(file.getContentType(), MediaType.IMAGE_PNG_VALUE)
        ) {
            return Result.fail("上传的不是图片");
        }
        //检查文件大小
        if (file.getSize() > 1024 * 1024 * 2) {
            return Result.fail("图片不能大于2M");
        }
        return userService.updateAvatar(userId, file);
    }

    //TODO 修改用户名接口（每年只能修改1次）
    @PutMapping("/update_username")
    public Result<?> updateUsername(HttpServletRequest request, @RequestBody UpdateUsernameDto dto) {
        Long userId = 1L;
        return userService.updateUsername(userId, dto);
    }

    //TODO 修改昵称接口（每个月只能修改3次）
    @PutMapping("/update_nickname")
    public Result<?> updateNickname(HttpServletRequest request, @RequestBody UpdateNicknameDto dto) {
        Long userId = 1L;
        return userService.updateNickname(userId, dto);
    }

        //TODO 查看历史头像接口
    @GetMapping("/avatar")
    public Result<Page> getAvatar(int page, int pageSize, long id){

        return userUpdateAvatarLogService.getAvatar(page, pageSize, id);
    }


    //    //TODO 将历史头像的某一个设置为头像接口
    @PutMapping("/before_avatar")
    public Result<?> updateBeforeAvatar(HttpServletRequest request, @RequestBody UpdateAvatarLogDto dto){
        Long userId = 1L;
        return userService.updateBeforeAvatar(userId, dto);

    }



    //    //TODO 删除历史头像接口
    @DeleteMapping("/before_avatar/{avatarId}")
    public Result<?> deleteAvatar(HttpServletRequest request, @PathVariable Long avatarId) {
        Long userId = 1L;
        return userUpdateAvatarLogService.deleteBeforeAvatar(userId, avatarId);
    }

//    //TODO 注册接口 剩余token不知道干啥没操作到
//    /**
//     * 注册
//     */
//    @PostMapping("/save")
//    public Result<?> save(@RequestBody UserEntity userEntity){
//        //生成随机salt值 RandomStringUtils需要引入依赖
//        String passwordSalt = RandomStringUtils.randomAlphanumeric(5);
//        //设置随机盐值
//        userEntity.setPasswordSalt(passwordSalt);
//        //设置密码二次加密
//        userEntity.setPassword(DigestUtils.md5DigestAsHex((passwordSalt + userEntity.getPassword()).getBytes()));
//
//        userEntity.setCreateTime(LocalDateTime.now());
//        userEntity.setUpdateTime(LocalDateTime.now());
//
//        boolean save = userService.save(userEntity);
//        if(save){
//            return Result.success("添加成功！");
//        }
//        return Result.fail("添加失败！");
//    }
//
//    /**
//     * 登录
//     *
//     */
//    @PostMapping("/login")
//    public Result<UserEntity> login(HttpServletRequest request, @RequestBody UserEntity userEntity){
//        //为什么还有接收一个request对象的数据?
//        //登陆成功后，需要从请求中获取员工的id，并且把这个id存到session中，这样想要获取登陆对象的时候就可以随时获取
//        //1、将页面提交的密码password进行md5加密处理
//        String password = userEntity.getPassword();//从前端用户登录拿到的用户密码
//        password = DigestUtils.md5DigestAsHex(password.getBytes());//对用户密码进行加密
//        //2、根据页面提交的用户名username查询数据库
//        LambdaQueryWrapper<UserEntity> queryWrapper = new LambdaQueryWrapper<>();
//        queryWrapper.eq(UserEntity::getUsername,userEntity.getUsername());
//        //在设计数据库的时候对username使用了唯一索引,所以这里可以使用getOne方法
//        UserEntity user = userService.getOne(queryWrapper);
//        //3、如果没有查询到则返回登录失败结果
//        if (user == null ){
//            return Result.fail("用户不存在");
//        }
//        //4、密码比对，如果不一致则返回登录失败结果
//        if (!user.getPassword().equals(password)){
//            //用户存在后从数据库查询到的密码(加密状态的)  password是前端用户自己输入的密码(已经加密处理)
//            return Result.fail("密码不正确");
//        }
//        //5、如果为已禁用状态，则返回员工已禁用结果
//        if (user.getState() == 0){
//            return Result.fail("账号已禁用");
//        }
//        //6、登录成功，将id存入Session并返回登录成功结果
//        request.getSession().setAttribute("user",user.getId());
//        //把从数据库中查询到的用户返回出去
//        return Result.success(user);
//    }


}
